IPUMS Analysis

IPUMS Migration Data

I emailed Stephan Whitaker to see if he could provide me the dataset highlighting the flows and he was unable to. But he did send me the following instructions on how to use the IPUMS dataset that might help highlight the trend.

Unfortunately, I didn’t get permission to release the gross flows. If I was going to try to make those myself with public data, I would take these steps:

  • Download 5 or 10 years of ACS microdata from IPUMS. Select the migration variable, year, PUMAs, MIGPUMAs and person weights.

  • Drop everyone who hasn’t moved in the last year based on the value in the migration variable.

  • Merge on lists of PUMAs and MIGPUMAs in the Minneapolis MSA.

  • Drop any mover who has both a Minneapolis MIGPUMA and a Minneapolis PUMA (those are local moves you’re not interested in).

  • Sum up the person weights within each year for movers with a Minneapolis MIGPUMA. That’s an annual estimate of out-migration from the metro.

  • Sum up the person weights within each year for movers with a Minneapolis PUMA. That’s the annual estimate of in-migrants.

So, that’s what I’m going to do here.

First, let’s import the dataset.

This is a massive dataset. It contains rows with the following variables;

x
YEAR
STATEFIP
PUMA
PERNUM
PERWT
MIGRATE1
MIGRATE1D
MIGPLAC1
MIGPUMA1

Here are the definitions of those variables.

Variable Definition
YEAR Census year
STATEFIP State (FIPS Code)
PUMA Public Use Microdata Area
PERNUM Person number in sample unit
PERWT Person weight
MIGRATE1 Migration status 1 year - general version
MIGRATE1D Migration status 1 year - detailed version
MIGPLAC1 State or country of residence 1 year ago
MIGPUMA1 PUMA of resident 1 year ago

Filter data

There are multiple steps I’m taking here.

  1. Remove non-movers: Remove individuals that have not moved at all or are unknown.
  2. Categorize PUMAs and MIGPUMAs into logical taxonomies;
    • Metro vs Greater MN: this just aggregates all PUMA and MIGPUMA into whether they are in the seven county metro vs. the rest of Minnesota.

    • Metro vs. Refined Greater MN: this will aggregate PUMAs into a seven county metro category and aggregate the other PUMAs into something that mimics the plannig regions of Minensota - NW, NE, Central, SW, SE PUMAS.

Remove non-movers

First, we need to get rid of anyone that hasn’t moved at all for each census year. We will use the MIGRATE1 variable which has the following codes;

  • 0 - N/A

  • 1 - Same house a year ago

  • 2 - Moved within state since a year ago

  • 3 - Moved between states since a year ago

  • 4 - Abroad one year ago

  • 9 - Unknown

So, let’s filter out everyone that is either 0, 1, or 9. In order to decrease the size of the file, I have already filtered these out when I submitted my request for the data. So my dataset doesn’t have any individuals that were categorized as such.

Categorize PUMAs and MIGPUMAs

The two primary variables IPUMS uses to track inflow and outflow of migration is PUMA and MIGPUMA. PUMA identifies the Public Use Microdata Area (PUMA) where the housing unit was located. PUMAs are the smallest geographic units identified in Public Use Microdata Samples since 1990 for both the decennial censuses and the ACS/PRCS. To help maintain the confidentiality of respondents in public use microdata, every PUMA must, by design, have at least 100,000 residents at the time of the corresponding census.

Note: PUMA codes are state-dependent. The PUMA codes for 1990 and later samples are unique only within each state, so a single code may identify different PUMAs in different states. To uniquely identify all PUMAs, it is necessary to combine the PUMA variable with a state identifier (STATEFIP or STATEICP). The IPUMS-defined 1960 PUMA codes are unique across all states and do not have this requirement.

The definitions of Migration Public Use Microdata Areas (Migration PUMAs) are used in ACS and PRCS samples to identify where respondents moved from. See the MIGPUMA1 variable description for more information.

Here are the codes that represent the PUMAs.



And here are the migration puma codes that cross reference the PUMA codes.



Unfortunately, the PUMA and MIGPUMA codes from 2010 to 2021 don’t compare nicely to 2022.

The maps below provide the PUMA and migration PUMA boundaries from 2010 to 2021 and than 2022’s version. We notice that the migraiton PUMAs fit into each or within multiple PUMA boundaries for each of the year breakdowns. So there is no problem compaing PUMA and migration PUMA.

Unfortunately, the PUMA boundaries change too much in order to compare the 2010-2021 PUMA with the 2022 PUMA.



Overall that means we need to create categories that align all the way across. It will be very difficult to do by geography. For example, if we try to combine PUMAs to create a Northwest region, there is no way to create a Northwest region from 2010-2021 PUMA to 2022 PUMA. They don’t match. If we want to see trends in migration flow by geography we will have to keep 2010-2021 data separate from 2022. That won’t be a problem and will still be interesting.

Now we can aggregate these areas into larger geographies so it’s easier to analyze. There are fewer migration PUMAs and so if we aggregate some of those then it will be easier to have the PUMAs follow.

The hope is that we can kind of keep the larger cities in each aggregate PUMA between the 2010-2021 definitions and the 2022 definition. For example, making sure Mankato is in the same region in the 2010-2021 taxonomy as the 2022 taxonomy, even when the PUMA area it’s located is changes.

MIGPUMA

  • 2010-2021

    • Northwest: 100, 200, 800

    • Northeast: 390

    • Central: 700, 600, 1900

    • St. Cloud: 900, 1800, 1000

    • Southwest: 2000, 2100, 2200

    • Southeast: 2400, 2300, 2500, 2600

    • Rochester: 02500

  • 2022

    • Northwest: 190, 700,

    • Northeast: 390

    • Central: 600, 1200, 2100

    • St. Cloud: 990

    • Southwest: 800, 2200, 2300, 2400,

    • Southeast: 2500, 2600, 2800, 2700

    • Rochester: 2700

The maps below are the PUMA and MIGPUMA boundaries for 2010 - 2021 and 2022 along with the geographic taxonomy. They match, so we are all good to go.



The other way of breaking this down is to categorize the state into two categories;

  1. Greater Minnesota (all regions not labeled seven county metro), and
  2. Seven county metro.

The maps below show what that looks like in correspondence with the new migration PUMAs. It does highlight that we can combine the 2022 data with the 2010 through 2021 data since they are the same areas.



Analysis - inflows and outflows

The charts below provide the flows for each year starting in 2013.

Greater MN vs. Metro

What we see here is Greater MN experiencing an increasing inflow and a decreasing outflow by 2017, and then a reversal before 2020, and since the pandemic another turnaround with Greater Minnesota having an increasing inflow and decreasing outflow.

In the seven county metro we see the opposite - they were having a larger inflow than outflow from 2013 to about 2017, and then it flipped and then the pandemic hit and there was a significant drop in inflows and a large increase in outflows.

Regional

  • Northwest: Northwest has been basically breaking even with a very modest net in migration since the early 2010s. There was a large drop in inflows in 2020 and 2021, but has recovered since that time.

  • Northeast: Northeast was also seeing a modest net in migration since the early 2010s. By about 2018 there was a large drop in inflows followed by a large increase of outflows in 2020. Since the pandemic it has evened out again.

  • Central:


Greater MN vs Metro



Greater MN Regions

2010-2021



2022